//**************************************************************
// ****** FUNCTIONS FOR SPI COMMUNICATION
*******
//**************************************************************
//Controller: ATmega8 (Clock: 8 Mhz-internal)
//Compiler: AVR-GCC
//Version : 2.0
//Author: CC
Dharmani, Chennai (India)
// www.dharmanitech.com
//Date: 26 Feb 2009
//**************************************************************
//**************************************************
//
***** HEADER FILE : SPI_routines.h
******
//**************************************************
#ifndef
_SPI_ROUTINES_H_
#define _SPI_ROUTINES_H_
#define SPI_SD SPCR = 0x52
#define SPI_HIGH_SPEED SPCR = 0x50;
SPSR |= (1<<SPI2X)
void spi_init(void);
unsigned char SPI_transmit(unsigned char);
unsigned char SPI_receive(void);
#endif
//**************************************************************
// ****** FUNCTIONS FOR SPI COMMUNICATION
*******
//**************************************************************
//Controller: ATmega8 (Clock: 8 Mhz-internal)
//Compiler: AVR-GCC
//Version : 2.0
//Author: CC
Dharmani, Chennai (India)
// www.dharmanitech.com
//Date: 26 Feb 2009
//**************************************************************
//**************************************************
// ***** SOURCE FILE : SPI_routines.c ******
//**************************************************
#include <avr/io.h>
#include "SPI_routines.h"
//SPI initialize for SD card
//clock rate: 125Khz
void spi_init(void)
{
SPCR = 0x52; //setup SPI: Master
mode, MSB first, SCK phase low, SCK idle low
SPSR = 0x00;
}
unsigned
char SPI_transmit(unsigned char data)
{
//
Start transmission
SPDR = data;
//
Wait for transmission complete
while(!(SPSR
& (1<<SPIF)));
data = SPDR;
return(data);
}
unsigned
char SPI_receive(void)
{
unsigned char
data;
// Wait for reception
complete
SPDR =
0xff;
while(!(SPSR & (1<<SPIF)));
data =
SPDR;
// Return data
register
return
data;
}
//******** END ******
www.dharmanitech.com *****